module.exports = (vm) => {
	// 初始化请求配置
	uni.$u.http.setConfig((config) => {
		/* config 为默认全局配置*/
		// config.baseURL = 'https://zt.qixiaowa.cn/uni-api/';

		config.baseURL = 'http://localhost:9002/'; /* 根域名 */
		// config.baseURL = 'http://192.168.0.117:9002/'; /* 根域名 */
		// config.baseURL = 'https://zt.qxwa.cn/uni-api/'; /* 根域名 */
		// config.baseURL = 'http://43.136.240.47:9000/'; /* 根域名 */
		// config.baseURL = 'https://47.113.187.152:9000/'; /* 根域名 */
		// config.baseURL = 'http://office.199743.xyz:9000/'; /* 根域名 */
		// config.baseURL = process.env.VUE_APP_BASE_URL; /* 根域名 */
		config.custom = {
			auth: true // 默认所有请求需要Token验证
		}
		return config
	})

	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
		// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
		config.data = config.data || {}
		// 根据custom参数中配置的是否需要token，添加对应的请求头
		if (config?.custom?.auth) {
			// 从Vuex获取Token名称和值
			const tokenName = vm.$store.state.user.tokenName || 'SA-TOKEN-USER' // 增加默认值，兼容未定义的情况
			const tokenValue = vm.$store.state.user.tokenValue

			// 若Token不存在或为空，清除本地存储（避免携带无效值）
			if (!tokenValue || tokenValue.trim() === '') {
				uni.removeStorageSync('token') // 修正：与user.js中存储的键名保持一致
			} else {
				// 携带有效的Token到请求头
				config.header[tokenName] = tokenValue
			}
		}
		return config
	}, config => { // 可使用async await 做异步操作
		return Promise.reject(config)
	})

	// 响应拦截
	uni.$u.http.interceptors.response.use((response) => {
		/* 对响应成功做点什么 可使用async await 做异步操作*/
		const data = response.data

		// 提前判断业务层返回的Token无效信息（如后端返回200但消息包含Token无效）
		if (data?.message && data.message.includes('Token无效')) {
			// 抛给错误拦截器统一处理
			throw {
				statusCode: 401,
				data
			}
		}

		return data
		// 以下为原有注释保留
		// 自定义参数
		// const custom = response.config?.custom
		// if (data.code !== 200) {
		// 	// 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
		// 	if (custom.toast !== false) {
		// 		// uni.$u.toast(data.message)
		// 	}
		// 	// 如果需要catch返回，则进行reject
		// 	if (custom?.catch) {
		// 		return Promise.reject(data)
		// 	} else {
		// 		// 否则返回一个pending中的promise，请求不会进入catch中
		// 		return new Promise(() => {})
		// 	}
		// }
		// return data.data === undefined ? {} : data.data
	}, (response) => {
		// 对响应错误做点什么 （statusCode !== 200）
		if (response.statusCode == 401) {
			// 避免在登录页重复跳转
			const currentPage = getCurrentPages().pop()?.route
			if (currentPage !== 'pages/login/login') {
				// 清除Vuex中无效的Token（修正：调用正确的mutation方法）
				vm.$store.commit('user/SET_TOKEN_NAME', '')
				vm.$store.commit('user/SET_TOKEN', '')
				// 清除本地存储的Token信息（修正：与user.js中存储的键名保持一致）
				uni.removeStorageSync('token')
				uni.removeStorageSync('userInfo') // 补充：同时清除用户信息缓存

				// 提示用户并跳转登录页
				uni.$u.toast('登录已过期，请重新登录')
				// 延迟跳转，确保提示信息显示完整
				setTimeout(() => {
					uni.reLaunch({
						url: '/pages/login/login'
					})
				}, 1500)
			}
			// 修正：401处理后返回空Promise，避免未捕获的错误
			return new Promise(() => {})
		}
		return Promise.reject(response)
	})
}